﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace RegularFunction
{
    /// <summary>
    /// 常用正则表达式函数
    /// </summary>
    public class RegularFunction
    {
        /// <summary>
        /// 判断字符串中是否包含汉字（true有，false无）
        /// </summary>
        /// <param name="str">字符串</param>
        /// <returns>返回bool值</returns>
        public static bool HasStringContainChinese(string str)
        {
            Regex reg = new Regex(@"[\u4e00-\u9fa5]");//正则表达式
            if (reg.IsMatch(str)) return true;
            return false;
        }
        /// <summary>
        /// 判断字符串中是否全部为汉字（true有，false无）
        /// </summary>
        /// <param name="str">字符串</param>
        /// <returns>返回bool值</returns>
        public static bool HasStringAllChinese(string str)
        {
            //如果使用 ^ 和 $ 封闭标记，则指示整个字符串（而不只是子字符串）都必须匹配正则表达式。
            Regex reg = new Regex(@"^[\u4e00-\u9fa5]+$");//正则表达式
            if (reg.IsMatch(str)) return true;
            return false;
        }
        /// <summary>
        /// 判断字符串中是否包含数字（true有，false无）
        /// </summary>
        /// <param name="str">字符串</param>
        /// <returns>返回bool值</returns>
        public static bool HasStringContainNumber(string str)
        {
            //正则表达式，表示数字的范围 ^符号是开始，$是关闭   
            Regex reg = new Regex(@"[0-9]");
            if (reg.IsMatch(str)) return true;
            return false;
        }
        /// <summary>
        /// 判断字符串中是否全部为数字（true有，false无）
        /// </summary>
        /// <param name="str">字符串</param>
        /// <returns>返回bool值</returns>
        public static bool HasStringAllNumber(string str)
        {
            //正则表达式，表示数字的范围 ^符号是开始，$是关闭   
            Regex reg = new Regex(@"^[0-9]+$");
            if (reg.IsMatch(str)) return true;
            return false;
        }
        /// <summary>
        /// 判断字符串中是否包含字母（true有，false无）
        /// </summary>
        /// <param name="str">字符串</param>
        /// <returns>返回bool值</returns>
        public static bool HasStringContainLetter(string str)
        {
            //正则表达式，表示数字的范围 ^符号是开始，$是关闭   
            Regex reg = new Regex(@"[A-Za-z]");
            if (reg.IsMatch(str)) return true;
            return false;
        }
        /// <summary>
        /// 判断字符串中是否全部为字母（true有，false无）
        /// </summary>
        /// <param name="str">字符串</param>
        /// <returns>返回bool值</returns>
        public static bool HasStringAllLetter(string str)
        {
            //正则表达式，表示数字的范围 ^符号是开始，$是关闭   
            Regex reg = new Regex(@"^[A-Za-z]+$");
            if (reg.IsMatch(str)) return true;
            return false;
        }

        /// <summary>
        /// 过滤字符串只保留汉字
        /// </summary>        
        /// <param name="str">字符串</param>
        /// <returns>返回汉字字符串</returns>
        public static string StringFilterToChinese(string str)
        {
            string chinese = "";
            if (Regex.IsMatch(str, "[\u4e00-\u9fa5-]+"))
            {
                chinese = Regex.Match(str, "[\u4e00-\u9fa5-]+").Value;
            }
            return chinese;
        }
        /// <summary>
        /// 过滤字符串只保留数字（过滤后为空返回null）
        /// </summary>
        /// <param name="str">字符串</param>
        /// <returns>返回数字字符串</returns>
        public static string StringFilterToNumber(string str)
        {
            return Regex.Replace(str, @"[^\d]*","");
        }
        /// <summary>
        /// 过滤字符串中的数字（过滤后为空返回null）
        /// </summary>
        /// <param name="str">字符串</param>
        /// <returns>返回字符串</returns>
        public static string StringFilterToNotNumber(string str)
        {
            return Regex.Replace(str, @"\d", "");
        }
    }
}
